package abstract_factory

import "project/design/factory/products"

type PCFactory interface {
	CreateMouse() products.Mouse
	CreateKeyboard() products.Keyboard
}

/////////////////////////////////////////////
type DellFactory struct{}

func CreateDellFactory() PCFactory {
	return new(DellFactory)
}

func (d DellFactory) CreateMouse() products.Mouse {
	return new(products.DellMouse)
}

func (d DellFactory) CreateKeyboard() products.Keyboard {
	return new(products.DellKeyboard)
}

/////////////////////////////////////////////
type HpFactory struct{}

func CreateHpFactory() PCFactory {
	return new(HpFactory)
}

func (h HpFactory) CreateMouse() products.Mouse {
	return new(products.HpMouse)
}

func (h HpFactory) CreateKeyboard() products.Keyboard {
	return new(products.HpKeyboard)
}
